#include "tmonitortreedelegate.h"
#include <QLineEdit>
#include <QDebug>

TMonitorTreeDelegate::TMonitorTreeDelegate(QObject *parent) : QStyledItemDelegate(parent)
{

}

/*
 * 创建组件当双击单元格的时候就会调用这个函数来创建一个组件
 * parent : 反正用于创建组件就对了
 * option : 携带一些信息的比如需要的窗体rect之类的
 * index  : 行列之类的信息
 */
QWidget *TMonitorTreeDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    Q_UNUSED(option)
    //值
    if(index.column() == 1) {
        QLineEdit *plineedit = new QLineEdit(parent);
        plineedit->setPlaceholderText("在此处修改值");
        return plineedit;
    }
    return nullptr;
}

/*
 * 用于从数据模型获取数值设置为编辑器的显示值,当单元格进入编辑状态的时候就会调用此函数
 * editor : 编辑器可用于恢复为组件
 * index  : 行列之类的信息
 */
void TMonitorTreeDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    QString value = index.model()->data(index,Qt::EditRole).toString();
    QLineEdit *plineedit = static_cast<QLineEdit*>(editor);
    plineedit->setText(value);
}


/*
 * 用于将代理编辑器上的值更新给数据模型
 * editor : 编辑器可用于恢复为组件
 * model  : 模型
 * index  : 行列之类的信息
 */
void TMonitorTreeDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    QLineEdit *plineedit = static_cast<QLineEdit*>(editor);
    model->setData(index,plineedit->text(),Qt::EditRole);
}

/*
 * 用于为组件设置大小
 * editor : 编辑器携带组件信息
 * option : 携带一些信息的比如需要的窗体rect之类的
 * index  : 行列之类的信息
 */
void TMonitorTreeDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    Q_UNUSED(index)
    editor->setGeometry(option.rect);
}
